package org.cloudlab.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.cloudlab.bean.SubRecord;

/**
 * 投稿记录服务接口层
 *
 * @author Liu Yicong
 * @date 2023/9/8
 */
public interface ISubRecordService extends IService<SubRecord> {

	/**
	 * 新增投稿记录
	 * 将会根据投稿记录更新文章和期刊的投稿状态
	 *
	 * @param subRecord 投稿记录
	 */
	void add(SubRecord subRecord);

	/**
	 * 更新投稿记录
	 * 将会根据更新的投稿记录更新Paper和Journal的投稿状态
	 *
	 * @param subRecord 投稿记录(需要包含投稿记录的id)
	 */
	void update(SubRecord subRecord);

	/**
	 * 非物理删除
	 * 这里除了删除投稿记录以外, 还需要将对应的Paper和Journal的状态修改一下
	 *
	 * @param subRecordId 投稿记录id
	 */
	void deleteBySubRecordId(Long subRecordId);

	/**
	 * 页面查询的所有投稿记录
	 *
	 * @param page    页面情况
	 * @param onlyOwn 只查看自己的
	 * @return 页面详情
	 */
	Page<SubRecord> queryByPage(Page<SubRecord> page, String onlyOwn, String subRecordName);

	/**
	 * 页面查询该文章的所有投稿记录
	 *
	 * @param page    页面情况
	 * @param paperId 文章id
	 * @return 页面详情
	 */
	Page<SubRecord> queryByPaperId(Page<SubRecord> page, Long paperId);

	/**
	 * 页面查询该期刊的所有投稿记录
	 *
	 * @param page      页面情况
	 * @param journalId 期刊id
	 * @return 页面详情
	 */
	Page<SubRecord> queryByJournalId(Page<SubRecord> page, Long journalId);

	/**
	 * 删除所有journal的投稿记录
	 *
	 * @param journalId 期刊id
	 */
	void deleteBatchByJournalId(Long journalId);

	/**
	 * 删除所有paper的投稿记录
	 *
	 * @param paperId 文章id
	 */
	void deleteByPaperId(Long paperId);
}
